/*
 * UtilRender.java
 * Copyright 2010 Universidad Francisco de Paula Santander (UFPS).
 * Todos los Derechos Reservados.
 * 
 * Creado el 26/04/2010, 08:26:29 AM
 */
package com.ufps.cuatro.controlador.render;

import java.awt.Color;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JEditorPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;

import org.jdesktop.application.ResourceMap;

import com.ufps.cuatro.CuatroApp;
import com.ufps.cuatro.controlador.listener.ControllerListenerPopupJTree;
import com.ufps.cuatro.modelo.analizador.ObjetoReflexion;
import com.ufps.cuatro.modelo.biblioteca.StaticListModelObject;
import com.ufps.cuatro.modelo.representacion.ModeloAsociado;
import com.ufps.cuatro.modelo.representacion.ObjetoTipoDatoReflexion;
import com.ufps.cuatro.modelo.representacion.componente.Componente;
import com.ufps.cuatro.modelo.old.ComponenteBeans;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorExtra;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorClaseCompleja;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorEnum;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorString;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorUnitario;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorGeneradorVinculador;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorExtra;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorMetodo;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteDistribuidorIntegradorSimple;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteGeneradoInterno;
import com.ufps.cuatro.modelo.representacion.componente.ComponenteGeneradoSimple;
import com.ufps.cuatro.util.ImplementarAyudaStandar;
import com.ufps.cuatro.util.MensajeAyudaVentana;
import com.ufps.cuatro.util.MensajeLineaAyudaVentana;
import com.ufps.cuatro.util.TipoCaso;
import com.ufps.cuatro.util.Utileria;
import com.ufps.cuatro.util.generadores.GeneradorArbol;
import com.ufps.cuatro.util.render.MyListRendererJLabel;
import com.ufps.cuatro.util.render.MyTreeCellRender;
import com.ufps.cuatro.vistas.analizador.JDialogNotificacionModeloAnalizado;
import com.ufps.cuatro.vistas.layout.JPanelExplorerTreeView;
import com.ufps.cuatro.vistas.layout.tab.JPanelTabOut;
import com.ufps.cuatro.vistas.util.JDialogPopupHelpInfo;

/**
 * <i><b>UtilRender:</b></i><p>Las Vistas y Renders de la Aplicación.</p>
 * 
 * @author Carlos A. Torres C. - Dolly E. Guerrero. <https://code.google.com/p/tesis4dor/>
 * @version 1.0 26/04/2010
 * @see ImplementarAyudaStandar
 * 
 */
public abstract class UtilRender implements ImplementarAyudaStandar{
    
    /**
     * Acción o Mensaje en ejecución de estado normal.
     */
    public final static int ACTION_NORMAL = 0;
    /**
     * Acción o Mensaje en ejecución de estado de Advertencia.
     */
    public final static int ACTION_WARNING = 1;
    /**
     * Acción o Mensaje en ejecución de estado de Error.
     */
    public final static int ACTION_ERROR = 2;
    /**
     * Acción o Mensaje en ejecución de estado de Información.
     */
    public final static int ACTION_INFORMATION = 3;
    
    /**
     * Referencia a la Consola de la Aplicación.
     */
    public static JEditorPane jEditorPaneConsole = null;
    
    /**
     * Referencia al Panel de la Vista de Clases.
     */
    public static JPanelExplorerTreeView objJPanelExplorerTreeViewClass         = null;
    /**
     * Referencia al Panel de la Vista de Tipoa de Datos.
     */
    public static JPanelExplorerTreeView objJPanelExplorerTreeViewType          = null;
    /**
     * Referencia al Panel de la Vista de la Biblioteca de Componentes.
     */
    public static JPanelExplorerTreeView objJPanelExplorerTreeViewLibrary       = null;
    /**
     * Referencia al Panel de la Vista del Patron.
     */
    public static JPanelExplorerTreeView objJPanelExplorerTreeViewAuto          = null;
    /**
     * Referencia al Panel de la Vista de la Paleta de Controles Soportados.
     */
    public static JPanelExplorerTreeView objJPanelExplorerTreeViewPalete        = null;
    /**
     * Referencia al Panel de la Vista de los Modelos Estáticos.
     */
    public static JPanelExplorerTreeView objJPanelExplorerTreeViewModels        = null;    
    /**
     * Referencia al Panel de la Vista de la Consola de la Aplicación.
     */
    public static JPanelTabOut objJPanelTabOut = null;
    
    static{
        try{            
            init();
        }catch(java.lang.Exception ex){}        
    }
    
    private static void init(){
        try{ 
            //Inicilaizaciones
            objJPanelExplorerTreeViewClass      = new JPanelExplorerTreeView(JPanelExplorerTreeView.EXPLORER_TREE_CLASS);
            objJPanelExplorerTreeViewType       = new JPanelExplorerTreeView(JPanelExplorerTreeView.EXPLORER_TREE_TYPE);        
            objJPanelExplorerTreeViewLibrary    = new JPanelExplorerTreeView(JPanelExplorerTreeView.EXPLORER_TREE_LIBRARY);        
            objJPanelExplorerTreeViewAuto       = new JPanelExplorerTreeView(JPanelExplorerTreeView.EXPLORER_TREE_AUTO);
            objJPanelExplorerTreeViewPalete     = new JPanelExplorerTreeView(JPanelExplorerTreeView.EXPLORER_TREE_PALETE);
            objJPanelExplorerTreeViewModels     = new JPanelExplorerTreeView(JPanelExplorerTreeView.EXPLORER_TREE_STATIC_MODEL_LIST_OBJECT);
            objJPanelTabOut                     = new JPanelTabOut();
            //MicroHelp
            objJPanelExplorerTreeViewClass.addMicroHelp(Utileria.leerRecursoTexto("Utileria.microhelp.explorer.panel.class"));
            objJPanelExplorerTreeViewType.addMicroHelp(Utileria.leerRecursoTexto("Utileria.microhelp.explorer.panel.type"));
            objJPanelExplorerTreeViewLibrary.addMicroHelp(Utileria.leerRecursoTexto("Utileria.microhelp.explorer.panel.library"));
            objJPanelExplorerTreeViewAuto.addMicroHelp(Utileria.leerRecursoTexto("Utileria.microhelp.explorer.panel.library"));
            objJPanelExplorerTreeViewPalete.addMicroHelp(Utileria.leerRecursoTexto("Utileria.microhelp.explorer.panel.palete"));
            objJPanelExplorerTreeViewModels.addMicroHelp(Utileria.leerRecursoTexto("Utileria.microhelp.explorer.panel.model"));            
        }catch(java.lang.Exception ex){
            UtilRender.printlnConsole("Error de Inicialización de Contexto.", ex.getMessage(), UtilRender.ACTION_ERROR);            
        }       
    }
    
    /**
     * Refrescas las Vistas de la Aplicación.
     * @param update indica si se reinicia la Consola de la Aplicación.
     */
    public static void reloadExplorerTreeView(boolean update){
       init();
       if(!update){
           try{ 
               objJPanelTabOut = new JPanelTabOut();
           }catch(java.lang.IllegalStateException ex){
               UtilRender.printlnConsole("Error de Inicialización de Contexto.", UtilRender.ACTION_NORMAL, false);            
           }catch(java.lang.NullPointerException ex){
               UtilRender.printlnConsole(ex.getMessage(), UtilRender.ACTION_ERROR, true);
           }
       }
    }
    
    /**
     * Genera una Etiqueta con Icono.
     * @param strMsg Mensaje.
     * @param strIcono Icono.
     * @return JLabel.
     */
    public static JLabel etiquetaMsg(String strMsg, String strIcono){
        JLabel objLabel = etiquetaMsg(strMsg);
        UtilRender.setIconoLabel(objLabel, strIcono, strMsg);
        return objLabel;
    }
    
    /**
     * Genera una Etiqueta.
     * @param strMsg Mensaje.
     * @return JLabel.
     */
    public static JLabel etiquetaMsg(String strMsg){
        JLabel objLabel = new JLabel(strMsg);
        objLabel.setHorizontalAlignment(JLabel.CENTER);
        return objLabel;
    }
    
    /**
     * Mensaje por defecto para indicar que alguna acción no ha sido implementada.
     */
    public static void msgActionNoImplement(){
        if(Utileria.objFrame != null){
            UtilRender.msgAdvertencia("Acción No Implementada.");
        }
        else{
            System.out.println("Acción No Implementada.");
        }
    }
    
    /**
     * Imprime un Mensaje por Consola.
     * @param strMsg Mensaje.
     * @param action Acción de Evento.
     * @param format Formato del Mensaje.
     * @return estado de la impresión.
     */
    public static boolean printlnConsole(String strMsg, int action, boolean format){        
        if(jEditorPaneConsole != null){
            if(strMsg != null){
                if(!strMsg.isEmpty()){
                    jEditorPaneConsole.setText(jEditorPaneConsole.getText() + "\nEjecución " + new Date() + ": " + strMsg);
                    return true;
                }                
            }            
        }
        else{                        
            System.out.println("Consola No Inicializada: " + strMsg);
        }
        return false;
    }
    
    /**
     * Imprime un Mensaje por consola con una traza de una exception.
     * @param strMsg Mensaje.
     * @param strEx Excepción.
     * @param action Acción de Evento.
     * @return estado de la Impresión.
     */
    public static boolean printlnConsole(String strMsg, String strEx, int action){        
        if(jEditorPaneConsole != null){
            if(!strMsg.isEmpty()){
                jEditorPaneConsole.setText(jEditorPaneConsole.getText() + "\nEjecución " + new Date() + ": " + strMsg);
                return true;
            }                        
        }
        else{                        
            strMsg = "Consola No Inicializada: " + strMsg;
        }
        System.out.println("Mensaje de Error: " + strMsg + "\n Mensaje Exception: " + strEx);
        return false;
    }
    
    /**
     * Imprime un Mensaje por consola con una traza de una exception.
     * @param strMsg Mensaje.
     * @param strEx Excepción.
     * @param action Acción de Evento.
     * @return estado de la Impresión.
     */
    public static boolean printlnConsole(String strMsg, int SystemOutPrint){        
        if(jEditorPaneConsole != null){
            if(!strMsg.isEmpty()){
                switch(SystemOutPrint){
                    case 0:
                        jEditorPaneConsole.setText(jEditorPaneConsole.getText() + "\nEjecución " + new Date() + ": " + strMsg);
                        break;
                    case 1:
                        jEditorPaneConsole.setText(jEditorPaneConsole.getText() + "\nEjecución " + new Date() + ": " + strMsg);    
                        System.out.println("\nEjecución " + new Date() + ": " + strMsg);
                        break;
                    case 2:
                        jEditorPaneConsole.setText(jEditorPaneConsole.getText() + "\nEjecución " + new Date() + ": " + strMsg);    
                        System.out.println("\nEjecución " + new Date() + ": " + strMsg);    
                        break;
                    default:
                        System.out.println("\nEjecución " + new Date() + ": " + strMsg);    
                }
                return true;
            }
        }
        else{                        
            strMsg = "Consola No Inicializada: ".concat(strMsg);
            System.out.println("Mensaje de Error: ".concat(strMsg));
        }        
        return false;
    }
    
    /**
     * Imprime un Mensaje por consola con una traza de una exception.
     * @param strMsg Mensaje.
     * @param strEx Excepción.
     * @param action Acción de Evento.
     * @return estado de la Impresión.
     */
    public static boolean printlnConsole(String strMsg){        
        if(jEditorPaneConsole != null){
            if(!strMsg.isEmpty()){
                jEditorPaneConsole.setText(jEditorPaneConsole.getText() + "\nEjecución " + new Date() + ": " + strMsg);
                return true;
            }
        }
        else{                        
            strMsg = "Consola No Inicializada: ".concat(strMsg);
            System.out.println("Mensaje de Error: ".concat(strMsg));
        }        
        return false;
    }
    
    /**
     * Elimina los Mensajes de la Consola de la Aplicación.
     * @return estado de la eliminación.
     */
    public static boolean clearConsole(){        
        if(jEditorPaneConsole != null){
            jEditorPaneConsole.setText("");
            return true;
        }
        else{           
            System.out.println("Consola No Inicializada.");
        }
        return false;
    }
    
    /**
     * Reinicia la Consola de la Aplicación.
     * @return estado del Reinicio.
     */
    public static boolean rebootConsole(){        
        if(jEditorPaneConsole != null){
            jEditorPaneConsole.setText("Reiniciando Consola " + new Date() + "...\nEsperando Ejecuciones...");
            return true;
        }
        else{            
            System.out.println("Consola No Inicializada.");
        }
        return false;
    }
    
    /**
     * Exporta la Información de la Consola.
     * @return Estado de la Exportación.
     */
    public static String exportConsoleOut(){
        if(jEditorPaneConsole != null){
            Date objFecha = new Date();
            String strFile = objFecha.toString();
            strFile = strFile.replaceAll(":", "");
            strFile = strFile.replaceAll(" ", "");
            String strPath = Utileria.strPathUser + Utileria.separador + strFile + ".txt";
            if(Utileria.guardarArchivoTexto(strPath, jEditorPaneConsole.getText())){
                return strPath;
            }
        }
        else{            
            System.out.println("Consola No Inicializada.");
        }
        return "";
    }
    
    /**
     * Devuelve el recursos que representa el Objeto.
     * @param objReflexion Elemento del Modelo Analizado (Class, Field, Method).
     * @return String que representa el icono asociado al tipo de Objeto.
     */
    public static String resourceIconObjetoReflexion(ObjetoReflexion objReflexion){
        if(objReflexion != null){
            if(objReflexion.getObj() instanceof Field){
                return Utileria.ICONO_ATRIBUTO;
            }
            else if(objReflexion.getObj() instanceof Method){
                return Utileria.ICONO_METODO;
            }
            else if(objReflexion.getObj() instanceof Constructor){
                return Utileria.ICONO_CONSTRUCTOR;
            }
            return Utileria.ICONO_CLASE;
        }
        else{            
            UtilRender.printlnConsole("Objeto Reflexión Nulo.", UtilRender.ACTION_NORMAL, false);            
        }
        return Utileria.ICONO_VACIO;
    }
    
    /**
     * Devuelve el recursos que representa el Objeto. 
     * @param objTipo Tipo de datos del Modelo Analizado.
     * @return String que representa el icono asociado al tipo de Objeto.
     */
    public static String resourceIconObjetoTipoDatoReflexion(ObjetoTipoDatoReflexion objTipo){                
        if(objTipo != null){
            if(objTipo.getObjCaso().geteCaso() == TipoCaso.ePrimitivo){            
                return Utileria.ICONO_PRIMITIVO;
            }
            else if(objTipo.getObjCaso().geteCaso() == TipoCaso.eArray){
                return Utileria.ICONO_ARRAY;
            }
            else if(objTipo.getObjCaso().geteCaso() == TipoCaso.eEnumeracion){
                return Utileria.ICONO_ENUMERACION;
            }
            else if(objTipo.getObjCaso().geteCaso() == TipoCaso.eJDKRegistrado){
                return Utileria.ICONO_JDK_REGISTRADO;
            }
            else if(objTipo.getObjCaso().geteCaso() == TipoCaso.eClaseMundo){
                return Utileria.ICONO_CLASE;
            }            
            else {
                return Utileria.ICONO_JDK_NO_REGISTRADO;
            }        
        }
        else{
            UtilRender.printlnConsole("Objeto Tipo Dato Reflexión Nulo.", UtilRender.ACTION_NORMAL, false);            
        }
        return Utileria.ICONO_VACIO;
    }
    
    /**
     * Devuelve el recursos que representa el Objeto. 
     * @param obj Componente que contiene una representación.
     * @return String que representa el icono asociado al tipo de Objeto.
     */
    public static String resourceIconComponente(Componente obj){
        if(obj instanceof ComponenteDistribuidorIntegradorMetodo){
            return Utileria.ICONO_COMPONENTE_INTEGRADOR_METODO;            
        }
        else if(obj instanceof ComponenteDistribuidorIntegradorExtra){
            return Utileria.ICONO_COMPONENTE_INTEGRADOR_METODO;            
        }
        else if(obj instanceof ComponenteDistribuidorIntegradorSimple){
            return Utileria.ICONO_COMPONENTE_INTEGRADOR_SIMPLE;            
        }
        else if(obj instanceof ComponenteDistribuidorGeneradorClaseCompleja){
            return Utileria.ICONO_COMPONENTE_CLASE_COMPLEJA;            
        }                
        else if(obj instanceof ComponenteDistribuidorGeneradorUnitario){
            return Utileria.ICONO_COMPONENTE_GENERADOR_UNITARIO;            
        }        
        else if(obj instanceof ComponenteDistribuidorGeneradorString){
            return Utileria.ICONO_COMPONENTE_GENERADOR_STRING;            
        }        
        else if(obj instanceof ComponenteDistribuidorGeneradorEnum){
            return Utileria.ICONO_COMPONENTE_ENUM;            
        }
        else if(obj instanceof ComponenteDistribuidorGeneradorVinculador){
            return Utileria.ICONO_COMPONENTE_GENERADOR_VINCULADOR;            
        }
        else if(obj instanceof ComponenteDistribuidorExtra){
            return Utileria.ICONO_COMPONENTE_EXTRA;            
        }
        else if(obj instanceof ComponenteGeneradoSimple){
            return Utileria.ICONO_COMPONENTE_GENERADO;
        } 
        else if(obj instanceof ComponenteGeneradoInterno){
            return Utileria.ICONO_COMPONENTE_GENERADO;
        }
        return Utileria.ICONO_COMPONENTE;
    }
    
    /**
     * Aplica formato a la Etiqueta por medio del Objeto del Modelo Analizado.
     * @param jLabel Etiqueta.
     * @param objReflexion Objeto del Modelo Analizado.
     */
    public static void helperIconLabelObjetoReflexion(JLabel jLabel, ObjetoReflexion objReflexion){        
        if(jLabel != null && objReflexion != null){
            String strMSG;
            strMSG = objReflexion.getStrNombre();
            setIconoLabel(jLabel, resourceIconObjetoReflexion(objReflexion), strMSG);
        }
        else{
            UtilRender.printlnConsole("Objeto Reflexión ó Control Etiqueta Nulos.", UtilRender.ACTION_NORMAL, false);            
        }
    }
    
    /**
     * Aplica formato a la Etiqueta por medio del Objeto del Modelo Analizado.
     * @param jLabel Etiqueta.
     * @param objReflexion Objeto del Modelo Analizado.
     */
    public static void helperIconLabelObjetoReflexiontoString(JLabel jLabel, ObjetoReflexion objReflexion){        
        if(jLabel != null && objReflexion != null){
            String strMSG;
            strMSG = objReflexion.getToGenericString();
            setIconoLabel(jLabel, resourceIconObjetoReflexion(objReflexion), strMSG);
        }else{
            UtilRender.printlnConsole("Objeto Reflexión ó Control Etiqueta Nulos.", UtilRender.ACTION_NORMAL, false);            
        }   
    }
    
    /**
     * Aplica formato a la Etiqueta por medio del Tipo de Dato del Modelo Analizado.
     * @param jLabel Etiqueta.
     * @param objTipo Tipo de Dato del Modelo Analizado.
     */
    public static void helperIconLabelObjetoTipoDatoReflexion(JLabel jLabel, ObjetoTipoDatoReflexion objTipo){        
       if(jLabel != null && objTipo != null){
            String strMSG;
            strMSG = objTipo.getStrNombre();
            setIconoLabel(jLabel, resourceIconObjetoTipoDatoReflexion(objTipo), strMSG);
        }else{
            UtilRender.printlnConsole("Objeto Tipo Dato ó Control Etiqueta Nulos.", UtilRender.ACTION_NORMAL, false);            
        } 
    }
    
    /**
     * Aplica formato a la Etiqueta por medio del Componente.
     * @param jLabel Etiqueta.
     * @param objComponente Componente que contiene una representación.
     */
    public static void helperIconLabelComponente(JLabel jLabel, Componente objComponente){        
        if(jLabel != null && objComponente != null){
            String strMSG;
            strMSG = objComponente.getName();
            setIconoLabel(jLabel, resourceIconComponente(objComponente), strMSG);
        }else{
            UtilRender.printlnConsole("Objeto Tipo Componente ó Control Etiqueta Nulos.", UtilRender.ACTION_NORMAL, false);            
        }
    }
    
    /**
     * Aplica formato a la Etiqueta por medio de un Objeto genérico.
     * @param jLabel Etiqueta.
     * @param obj Objeto genérico.
     */
    public static void helperIconLabel(JLabel jLabel, Object obj){               
        if( jLabel != null && obj != null){
            if(obj instanceof ObjetoTipoDatoReflexion){            
                helperIconLabelObjetoTipoDatoReflexion(jLabel, (ObjetoTipoDatoReflexion)obj);
            }        
            else if(obj instanceof Componente){
                helperIconLabelComponente(jLabel, (Componente)obj);
            }         
            else if(obj instanceof ObjetoReflexion){
                helperIconLabelObjetoReflexion(jLabel, (ObjetoReflexion)obj);
            }
            else if(obj instanceof Field){
                Field objField = (Field) obj;
                setIconoLabel(jLabel, Utileria.ICONO_ATRIBUTO, objField.toGenericString());
            }
            else if(obj instanceof Method){            
                Method objMethod = (Method) obj;
                setIconoLabel(jLabel, Utileria.ICONO_METODO, objMethod.toGenericString());
            }
            else if (obj instanceof String) {
                String strClassPathComponente = (String) obj;
                setIconoLabel(jLabel, Utileria.ICONO_COMPONENTE, strClassPathComponente);            
            }
            else if (obj instanceof StaticListModelObject) {
                StaticListModelObject objStaticListModelObject = (StaticListModelObject) obj;
                setIconoLabel(jLabel, Utileria.ICONO_MODEL_STATIC, objStaticListModelObject.getName());            
            }
        }
        else{
            UtilRender.printlnConsole("Control Etiqueta u Objeto Nulos.", UtilRender.ACTION_NORMAL, false);            
        }
    }
      
    
    /**
     * Aplica formato de Advertencia a la Etiqueta.
     * @param jLabel Etiqueta.
     * @param msg Mensaje de Advertencia.
     */
    public static void helperIconWarningLabel(JLabel jLabel, String msg){
      if(jLabel != null){
        setIconoLabel(jLabel, Utileria.ICONO_ADVERTENCIA, msg);         
        }
      else{
            UtilRender.printlnConsole("Control Etiqueta Nulos.", UtilRender.ACTION_NORMAL, false);            
        }
    }
      
    
    /**
     * Aplica formato de Error a la Etiqueta.
     * @param jLabel Etiqueta.
     * @param msg Mensaje de Error.
     */
    public static void helperIconErrorLabel(JLabel jLabel, String msg){
      if(jLabel != null){
        setIconoLabel(jLabel, Utileria.ICONO_ERROR, msg);         
        }
       else{
            UtilRender.printlnConsole("Control Etiqueta Nulos.", UtilRender.ACTION_NORMAL, false);            
        }
    }
    
    /**
     * Aplica formato de Información a la Etiqueta.
     * @param jLabel Etiqueta.
     * @param msg Mensaje de Información.
     */
    public static void helperIconInformationLabel(JLabel jLabel, String msg){
        setIconoLabel(jLabel, Utileria.ICONO_INFORMACION, msg);         
    }
    
    /**
     * Aplica formato genérico a la Etiqueta.
     * @param jLabel Etiqueta.
     * @param key Recurso gráfico, icono.
     * @param strMSG Mensaje.
     */
    public static void setIconoLabel(JLabel jLabel, String key, String strMSG){
       if(jLabel != null) {
            if(!key.isEmpty()){
                key = key.replaceAll("16x16","32x32");
                ImageIcon icono = Utileria.leerRecursoImagen(key, 16);
                JLabel labelIcono = new JLabel(icono);
                jLabel.setIcon(labelIcono.getIcon());
            }
            jLabel.setText("<html>" + strMSG + "</html>");        
            UtilRender.printlnConsole("Objeto Key vacio.", UtilRender.ACTION_NORMAL, false);      
         }  
       else{
            UtilRender.printlnConsole("Control Etiqueta Nulos.", UtilRender.ACTION_NORMAL, false);            
        }
    }
    
    /**
     * Establece la propiedad Icono de un control grafico.
     * @param jComponent Control Gráfico.
     * @param strPath Valor de la Propiedad.
     */
    public static void loadIconoJComponent(JComponent jComponent, String strPath){        
        try{
            if(jComponent instanceof JLabel){
                JLabel jLabel = (JLabel) jComponent;
                ImageIcon icono = new ImageIcon(strPath);
                JLabel labelIcono = new JLabel(icono);
                jLabel.setIcon(labelIcono.getIcon());        
            }
            else if(jComponent instanceof JButton){
                JButton jButton = (JButton) jComponent;
                ImageIcon icono = new ImageIcon(strPath);
                JLabel labelIcono = new JLabel(icono);
                jButton.setIcon(labelIcono.getIcon());        
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Establece la propiedad Texto de un control grafico.
     * @param jComponent Control gráfico.
     * @param strText Valor de la Propiedad.
     */
    public static void loadTextJComponent(JComponent jComponent, String strText){        
        try{            
            if(jComponent instanceof JLabel){
                JLabel jLabel = (JLabel) jComponent;
                jLabel.setText(strText);        
            }
            else if(jComponent instanceof JTextField){
                JTextField jTextField = (JTextField) jComponent;
                jTextField.setText(strText);        
            }            
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Establece la propiedad Editable de un control grafico.
     * @param jComponent Control gráfico.
     * @param boolEditable Valor de la Propiedad.
     */
    public static void loadEditableJComponent(JComponent jComponent, boolean boolEditable){        
        try{            
            if(jComponent instanceof JTextField){
                JTextField jTextField = (JTextField) jComponent;
                jTextField.setEditable(boolEditable);        
            }            
            else if(jComponent instanceof JTextArea){
                JTextArea jTextArea = (JTextArea) jComponent;
                jTextArea.setEditable(boolEditable);        
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Establece la propiedad Seleccionado de un control grafico.
     * @param jComponent Control gráfico.
     * @param boolSelected Valor de la Propiedad.
     */
    public static void loadSelectedJComponent(JComponent jComponent, boolean boolSelected){        
        try{            
            if(jComponent instanceof JCheckBox){
                JCheckBox jTextField = (JCheckBox) jComponent;
                jTextField.setSelected(boolSelected);
            }            
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Establece la propiedad Tooltipis de un control grafico.
     * @param jComponent Control gráfico.
     * @param strToolTips Valor de la Propiedad.
     */
    public static void loadToolTipsJComponent(JComponent jComponent, String strToolTips){        
        if(jComponent != null){           
            jComponent.setToolTipText(strToolTips);                        
        }else{
            UtilRender.printlnConsole("Componente vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Establece la propiedad Activo de un control grafico.
     * @param jComponent Control gráfico.
     * @param boolEstado Valor de la Propiedad.
     */
    public static void loadEnableJComponent(JComponent jComponent, boolean boolEstado){        
        if(jComponent != null){           
            jComponent.setEnabled(boolEstado);                        
        }else{
            UtilRender.printlnConsole("Componente vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Establece la propiedad Opaco de un control grafico.
     * @param jComponent Control gráfico.
     * @param boolEstado Valor de la Propiedad.
     */
    public static void loadOpaqueJComponent(JComponent jComponent, boolean boolEstado){        
        if(jComponent != null){           
            jComponent.setOpaque(boolEstado);                        
        }else{
            UtilRender.printlnConsole("Componente vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Establece la propiedad Color de un control grafico.
     * @param jComponent Control gráfico.
     * @param objColor Valor de la Propiedad.
     */
    public static void loadForegroundJComponent(JComponent jComponent, Color objColor){        
        if(jComponent != null){            
            jComponent.setForeground(objColor);
        }
        else{
            UtilRender.printlnConsole("Componente vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Establece la propiedad Fondo de un control grafico.
     * @param jComponent Control gráfico.
     * @param objColor Valor de la Propiedad.
     */
    public static void loadBackgroundJComponent(JComponent jComponent, Color objColor){        
        if(jComponent != null){            
            jComponent.setBackground(objColor);
        }
        else{
            UtilRender.printlnConsole("Componente vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }   
    
    /**
     * Crea el Controlador de gestión del Arbol.
     * @param objParent Objeto padre del Arbol.
     * @param jTree Control gráfico.
     * @param objSeleccionado Nodo Seleccionado.
     */
    public static void createPopupMenuObjectSeleccionado(Object objParent, JTree jTree, Object objSeleccionado) {        
        if(jTree != null){
            ControllerListenerPopupJTree objMyPopup = new ControllerListenerPopupJTree(objParent, jTree, objSeleccionado);
            jTree.addMouseListener(objMyPopup);                    
        }
        else{
            UtilRender.printlnConsole("Arbol vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Crea la Vista para un nodo de un árbol.
     * @param jTree Control gráfico.
     * @param objRoot Nodo.
     * @param renderer indica si el control es renderizado.
     * @param expand indica si el control es expandido.
     * @param selectrow indica si se selecciona un nodo.
     */
    public static void helperRenderJTree(JTree jTree, Object objRoot, int renderer, boolean expand, int selectrow) {        
        DefaultMutableTreeNode objRaiz = null;
        if(objRoot instanceof ObjetoTipoDatoReflexion){
            objRaiz = GeneradorArbol.crearEstructura((ObjetoTipoDatoReflexion) objRoot);
        }          
        else if(objRoot instanceof ObjetoReflexion){
            objRaiz = GeneradorArbol.crearEstructura((ObjetoReflexion) objRoot);
        }
        else if(objRoot instanceof Componente){
            objRaiz = GeneradorArbol.crearEstructura((Componente) objRoot);
        }
        else if(objRoot instanceof ComponenteBeans){
            objRaiz = GeneradorArbol.crearEstructura((ComponenteBeans) objRoot);
        }
        else if(objRoot instanceof ModeloAsociado){
            objRaiz = GeneradorArbol.crearEstructura((ModeloAsociado) objRoot);
        }
        if(objRaiz == null){                    
            objRaiz = GeneradorArbol.crearNodo("Vista No Disponible.");
        }
        UtilRender.helperRenderJTree(jTree, objRaiz, renderer, expand, selectrow);
    } 
    
    /**
     * Crea la Vista para un nodo de un árbol.
     * @param jTree Control gráfico.
     * @param objRaiz Nodo.
     * @param renderer indica si el control es renderizado.
     * @param expand indica si el control es expandido.
     * @param selectrow indica si se selecciona un nodo.
     */
    public static void helperRenderJTree(JTree jTree, DefaultMutableTreeNode objRaiz, int renderer, boolean expand, int selectrow) {                
        if(jTree != null){
            if(objRaiz == null){                    
                objRaiz = GeneradorArbol.crearNodo("Vista No Disponible.");
            }
            JTree objArbol = new JTree(objRaiz);
            jTree.setModel(objArbol.getModel());
            MyTreeCellRender objRender = new MyTreeCellRender(renderer);
            jTree.setCellRenderer(objRender); 
            jTree.setExpandsSelectedPaths(expand);        
            if(selectrow >= 0){
                jTree.setSelectionRow(0);
            }
        }else{
            UtilRender.printlnConsole("Arbol vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Carga una Colección en una Lista.
     * @param jList Lista.
     * @param objColeccion Colección.
     * @param selection Modo de Selección.
     */
    public static void helperJList(JList jList, ArrayList<?> objColeccion, int selection){
       if(objColeccion != null){
            JList objList = new JList(objColeccion.toArray());
            jList.setModel(objList.getModel());                
            jList.setSelectionMode(selection);
        }else{
            UtilRender.printlnConsole("Coleccion vacia.", UtilRender.ACTION_NORMAL, false);   
        }   
    }       
    
    /**
     * Carga una Colección en una Lista.
     * @param jList Lista.
     * @param objColeccion Colección.
     * @param renderer Tipo de render que utilizará la vista.
     */
    public static void helperRenderJList(JList jList, ArrayList<?> objColeccion, int renderer){
        if(jList != null){
            UtilRender.helperJList(jList, objColeccion, javax.swing.ListSelectionModel.SINGLE_SELECTION);
            MyListRendererJLabel objRenderer = new MyListRendererJLabel(renderer);
            jList.setCellRenderer(objRenderer);                
        }else{
            UtilRender.printlnConsole("Lista vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Carga una Colección en una Lista.
     * @param jList Lista.
     * @param objColeccion Colección.
     * @param renderer Tipo de render que utilizará la vista.
     * @param seleccion Modo de Selección.
     */
    public static void helperRenderJList(JList jList, ArrayList<?> objColeccion, int renderer, int seleccion){
        if(jList != null){
            UtilRender.helperJList(jList, objColeccion, seleccion);
            MyListRendererJLabel objRenderer = new MyListRendererJLabel(renderer);
            jList.setCellRenderer(objRenderer);                
        }else{
            UtilRender.printlnConsole("Lista vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Carga un Objeto en un Combo.
     * @param jComboBox Combo.
     * @param obj Objeto.
     * @param renderer Tipo de render que usará la vista.
     */
    public static void helperRenderJComboBox(JComboBox jComboBox, Object obj, int renderer){
        if(jComboBox != null){
            JComboBox objCombo = new JComboBox();
            objCombo.addItem(obj);
            jComboBox.setModel(objCombo.getModel());        
            MyListRendererJLabel objRenderer = new MyListRendererJLabel(renderer);
            jComboBox.setRenderer(objRenderer);                
        }else{
            UtilRender.printlnConsole("Combo vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }
    
    /**
     * Carga una Colección en un Combo.
     * @param jComboBox Combo.
     * @param objColeccion Colección.
     * @param renderer Tipo de render que usará la vista.
     */
    public static void helperRenderJComboBox(JComboBox jComboBox, ArrayList<?> objColeccion, int renderer){
        if(jComboBox != null && objColeccion != null){
            JComboBox objCombo = new JComboBox(objColeccion.toArray());
            jComboBox.setModel(objCombo.getModel());        
            MyListRendererJLabel objRenderer = new MyListRendererJLabel(renderer);
            jComboBox.setRenderer(objRenderer);                
        }else{
            UtilRender.printlnConsole("Combo vacio.", UtilRender.ACTION_NORMAL, false);   
        }
    }   
    
    /**
     * Visualiza un Mensaje de Advetencia.
     * @param msg Mensaje de Advertencia.
     */
    public static void msgAdvertencia(String msg){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(Utileria.objFrame, 
                msg, 
                Utileria.strTituloApp, JOptionPane.WARNING_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    
    /**
     * Visualiza un Mensaje de Advetencia.
     * @param msg Mensaje de Advertencia.
     * @param objDialog Ventana Padre.
     */
    public static void msgAdvertencia(String msg, JDialog objDialog){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(objDialog, 
                msg, 
                Utileria.strTituloApp, JOptionPane.WARNING_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Advetencia.
     * @param msg Mensaje de Advertencia.
     * @param objComponent Componente Padre.
     */
    public static void msgAdvertencia(String msg, JComponent objComponent){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(objComponent, 
                msg, 
                Utileria.strTituloApp, JOptionPane.WARNING_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }    
    
    /**
     * Visualiza un Mensaje de Error.
     * @param msg Mensaje de Error.
     */
    public static void msgError(String msg){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(Utileria.objFrame, 
                msg, 
                Utileria.strTituloApp, JOptionPane.ERROR_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Error.
     * @param msg Mensaje de Error.
     * @param objDialog Ventana Padre.
     */
    public static void msgError(String msg, JDialog objDialog){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(objDialog, 
                msg, 
                Utileria.strTituloApp, JOptionPane.ERROR_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Error.
     * @param msg Mensaje de Error.
     * @param objComponent Componente Padre.
     */
    public static void msgError(String msg, JComponent objComponent){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(objComponent, 
                msg, 
                Utileria.strTituloApp, JOptionPane.ERROR_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Información.
     * @param msg Mensaje de Información.
     */
    public static void msgInformacion(String msg){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(Utileria.objFrame, 
                msg, 
                Utileria.strTituloApp, JOptionPane.INFORMATION_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Información.
     * @param msg Mensaje de Información.
     * @param objDialog Ventana Padre.
     */
    public static void msgInformacion(String msg, JDialog objDialog){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(objDialog, 
                msg, 
                Utileria.strTituloApp, JOptionPane.INFORMATION_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Información.
     * @param msg Mensaje de Información.
     * @param objComponent Componente Padre.
     */
    public static void msgInformacion(String msg, JComponent objComponent){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(objComponent, 
                msg, 
                Utileria.strTituloApp, JOptionPane.INFORMATION_MESSAGE);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Advertencia.
     * @param msg Mensaje de Advertencia.
     * @param infoConsole Indica si se imprime el mensaje en la consola.
     */
    public static void msgAdvertencia(String msg, boolean infoConsole){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(Utileria.objFrame, 
                msg, 
                Utileria.strTituloApp, JOptionPane.WARNING_MESSAGE);
            if(infoConsole){
                Utileria.viewConsole(msg);
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Error.
     * @param msg Mensaje de Error.
     * @param infoConsole Indica si se imprime el mensaje en la consola.
     */
    public static void msgError(String msg, boolean infoConsole){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(Utileria.objFrame, 
                msg, 
                Utileria.strTituloApp, JOptionPane.ERROR_MESSAGE);
            if(infoConsole){
                Utileria.viewConsole(msg);
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Visualiza un Mensaje de Error.
     * @param msg Mensaje de Error.
     * @param infoConsole Indica si se imprime el mensaje en la consola.
     */
    public static void msgInformacion(String msg, boolean infoConsole){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return;
            }
            Utileria.mostrarMensaje(Utileria.objFrame, 
                    msg, 
                    Utileria.strTituloApp, JOptionPane.INFORMATION_MESSAGE);
            if(infoConsole){
                Utileria.viewConsole(msg);
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
    }
    
    /**
     * Ventana de Confirmación de Mensajes.
     * @param msg Mensaje de Confirmación.
     * @return Estado de la Confirmación.
     */
    public static boolean msgConfirmar(String msg){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return false;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return false;
            }
            return Utileria.confirmarOrden(Utileria.objFrame, 
                    msg, 
                    Utileria.strTituloApp);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    /**
     * Ventana de Confirmación de Mensajes.
     * @param msg Mensaje de Confirmación.
     * @param objComponent Componente Padre.
     * @return Estado de la Confirmación.
     */
    public static boolean msgConfirmar(String msg, JComponent objComponent){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return false;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return false;
            }
            return Utileria.confirmarOrden(objComponent, 
                msg, 
                Utileria.strTituloApp);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    /**
     * Ventana de Confirmación de Mensajes.
     * @param msg Mensaje de Confirmación.
     * @param objDialog Ventana Padre.
     * @return Estado de la Confirmación.
     */
    public static boolean msgConfirmar(String msg, JDialog objDialog){
        try{
            if(msg == null){
                UtilRender.printlnConsole("El Mensaje es Nulo.", UtilRender.ACTION_NORMAL, false);
                return false;
            }
            else if(msg.isEmpty()){
                UtilRender.printlnConsole("El Mensaje esta Vacio.", UtilRender.ACTION_NORMAL, false);
                return false;
            }
            return Utileria.confirmarOrden(objDialog, 
                    msg, 
                    Utileria.strTituloApp);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    /**
     * Función genérica para la confirmación de cierre de ventanas.
     * @return estado de la confirmación.
     */
    public static boolean confirmarCerrarVentana(){
        try{
            if(Utileria.objFrame == null){
                return false;
            }
            return Utileria.confirmarOrden(Utileria.objFrame, 
                    "¿Desea Cerrar la Ventana y Cancelar el Proceso?", 
                    Utileria.strTituloApp);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    
    /**
     * Función genérica para la confirmación de cierre de la aplicación.
     * @return estado de la confirmación.
     */
    public static boolean finalizarApp(){
        try{
            if(Utileria.objFrame == null){
                return false;
            }
            return Utileria.confirmarOrden(Utileria.objFrame, 
                    "¿Desea Finalizar la Aplicación?", 
                    Utileria.strTituloApp);
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    
    /**
     * Función genérica para el despliegue de la ayuda.
     * @param objClass Fuente de los recursos.
     * @param strTitle Titulo de la Ventana.
     */
    public static void openDialogHelp(Class<?> objClass, String strTitle){        
        if(objClass != null){        
            ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(com.ufps.cuatro.CuatroApp.class).getContext().getResourceMap(objClass);
            if(Utileria.objDialogHelp != null){
                Utileria.objDialogHelp.dispose();
                Utileria.objDialogHelp = null;
            }
            ArrayList<MensajeAyudaVentana> objMensajes = getMensajesAyuda(resourceMap);
            if(objMensajes != null){
                Utileria.objDialogHelp = new JDialogPopupHelpInfo(objMensajes, strTitle);
                Utileria.objDialogHelp.setLocationRelativeTo(Utileria.objFrame);        
                CuatroApp.getApplication().show(Utileria.objDialogHelp);        
            }
            else{
                UtilRender.printlnConsole("No se ha Definido el Archivo de Ayuda: " + objClass.getSimpleName() + ".properties.", UtilRender.ACTION_NORMAL, false);   
            }
        }else{
            UtilRender.printlnConsole("Ventana Principal Nula.", UtilRender.ACTION_NORMAL, false);   
        }
    }    
    
    private static ArrayList<MensajeAyudaVentana> getMensajesAyuda(ResourceMap resourceMap) {
        ArrayList<MensajeAyudaVentana> objMensajes = new ArrayList<MensajeAyudaVentana>();
        String keys = resourceMap.getString("Utileria.Mensajes.Ayuda.keys");
        if(keys != null){
            String key = "Utileria.Mensajes.Ayuda";
            ArrayList<String[]> propiedades = getPropertiesList(resourceMap, key, keys);
            for(String[] values : propiedades){
                MensajeAyudaVentana obj = new MensajeAyudaVentana(
                            Utileria.getValueInteger(values[0], 0),
                            Utileria.getValueString(values[1], ""),                        
                            Utileria.getValueString(values[2], ""),
                            Utileria.getValueBoolean(values[3], false)
                        ); 
                obj.setObjLineas(getLineaMensajeAyuda(resourceMap, obj));
                objMensajes.add(obj);
                System.out.println(obj);
            }        
            return objMensajes;
        }
        else{
            UtilRender.msgAdvertencia("No existe Ayuda Asociada al Recurso.");
        }
        return null;
    }

    private static ArrayList<MensajeLineaAyudaVentana> getLineaMensajeAyuda(ResourceMap resourceMap, MensajeAyudaVentana objMensaje) {
        ArrayList<MensajeLineaAyudaVentana> objMensajes = new ArrayList<MensajeLineaAyudaVentana>();
        String keys = resourceMap.getString("Utileria.Mensajes.Ayuda.Linea.keys");
        String key = "Utileria.Mensajes.Ayuda[" + objMensaje.getId() + "].Linea";
        ArrayList<String[]> propiedades = getPropertiesList(resourceMap, key, keys);
        for(String[] values : propiedades){
            MensajeLineaAyudaVentana obj = new MensajeLineaAyudaVentana(
                        Utileria.getValueInteger(values[0], 0),
                        Utileria.getValueString(values[1], ""),                        
                        Utileria.getValueString(values[2], ""),
                        objMensaje
                    );            
            objMensajes.add(obj);
            System.out.println(obj);
        }        
        return objMensajes;
    }
    
    private static ArrayList<String[]> getPropertiesList(ResourceMap resourceMap, String key, String tokens){
        ArrayList<String[]> values = new ArrayList<String[]>();
        StringTokenizer objTokens = new StringTokenizer(tokens, " ,");
        int i = 0;
        int size = objTokens.countTokens();
        String[] keys = new String[size];
        while(objTokens.hasMoreTokens()) {
            keys[i++] = objTokens.nextToken();
        }
        i = 0;
        while(resourceMap.containsKey(key + "[" + i + "]." + keys[0])){
            String[] grupo = new String[size];
            for(int j = 0; j < size; j++){
                String tempKey = key + "[" + i + "]." + keys[j];
                if(resourceMap.containsKey(tempKey)) {
                    grupo[j] = resourceMap.getString(tempKey);
                }
            }
            values.add(grupo);
            i++;
        }
        return values;
    }
    
    /**
     * Tamaño de la Fuente de color.
     */
    public final static int FONT_COLOR = 10;
    /**
     * Tamaño de la Fuente.
     */
    public final static int FONT_SIZE = 11;
    
    /**
     * Aplica formato de color html.
     * @param text Texto.
     * @param opcion opción de formato.
     * @param value valor de la opción.
     * @return texto formateado.
     */
    public static String formatHtml(String text, int opcion, String value){
        String strFormat;
        switch(opcion){
            case UtilRender.FONT_COLOR:
                strFormat = "<font color=#" + value + ">" + text + "</font>";
                break;
            default:
                strFormat = text;
                
        }
        return strFormat;
    }
    
    /**
     * Aplica formato de color html.
     * @param text Texto.
     * @param color color de la fuente.
     * @param html Indica si incluye los literales html.
     * @return texto formateado.
     */
    public static String formatFontColorHtml(String text, String color, boolean html){
        String strFormat = (html) ? "<html><font color=#" + color + ">" + text + "</font></html>" :
                "<font color=#" + color + ">" + text + "</font>";
        return strFormat;
    }
    
    /**
     * Aplica formato de tamaño de fuente html.
     * @param text Texto.
     * @param size Tamaño.
     * @param html Indica si incluye los literales html.
     * @return texto formateado.
     */
    public static String formatFontSizeHtml(String text, String size, boolean html){
        String strFormat = (html) ? "<html><font size=" + size + ">" + text + "</font></html>" :
                "<font size=" + size + ">" + text + "</font>";
        return strFormat;
    }
    
    /**
     * Aplica formato de tamaño de fuente html.
     * @param text Texto.
     * @param size Tamaño.
     * @param html Indica si incluye los literales html.
     * @return texto formateado.
     */
    public static String formatFontSizeHtml(String text, int size, boolean html){
        String strFormat = (html) ? "<html><font size=" + size + ">" + text + "</font></html>" :
                "<font size=" + size + ">" + text + "</font>";
        return strFormat;
    }
    
    /**
     * Aplica formato de color y tamaño de fuente html.
     * @param text Texto.
     * @param size Tamaño.
     * @param color Color de la fuente.
     * @param html Indica si incluye los literales html.
     * @return texto formateado.
     */
    public static String formatFontSizeColorHtml(String text, int size, String color, boolean html){
        String strFormat = (html) ? "<html><font size=" + size + " color=#" + color + ">" + text + "</font></html>" :
                "<font size=" + size + " color=#" + color + ">" + text + "</font>";
        return strFormat;
    }
    
    /**
     * Reinicia las Vistas de la Aplicación.
     */
    public static void actualizarLayoutAppExplorer(){
        objJPanelExplorerTreeViewClass.reloadTreeView();
        objJPanelExplorerTreeViewType.reloadTreeView();
        objJPanelExplorerTreeViewLibrary.reloadTreeView();
        objJPanelExplorerTreeViewAuto.reloadTreeView();
        objJPanelExplorerTreeViewPalete.reloadTreeView();
        objJPanelExplorerTreeViewModels.reloadTreeView();
    }
    
    /**
     * Ventana genérica de captura de texto.
     * @param objDialog Ventana Padre.
     * @param strLabel Titulo de la captura.
     * @return Texto ingresado.
     */
    public static String leerEntradaTexto(JDialog objDialog, String strLabel){
        try{
            if(objDialog != null){
                if(!strLabel.isEmpty()){
                    return JOptionPane.showInputDialog(objDialog, Utileria.strTituloApp, strLabel, JOptionPane.INFORMATION_MESSAGE);
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }    
        return null;
    }
    
    /**
     * Ventana genérica de captura de texto.
     * @param objComponent Componente Padre.
     * @param strLabel Titulo de la captura.
     * @return Texto ingresado.
     */
    public static String leerEntradaTexto(JComponent objComponent, String strLabel){
        try{
            if(objComponent != null){
                if(!strLabel.isEmpty()){
                    return JOptionPane.showInputDialog(objComponent, Utileria.strTituloApp, strLabel, JOptionPane.INFORMATION_MESSAGE);
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    /**
     * Ventana genérica de captura de texto.
     * @param strLabel Titulo de la captura.
     * @return Texto ingresado.
     */
    public static String leerEntradaTexto(String strLabel){
        try{
            if(strLabel != null){
                if(!strLabel.isEmpty()){
                    return JOptionPane.showInputDialog(Utileria.objFrame, Utileria.strTituloApp, strLabel, JOptionPane.INFORMATION_MESSAGE);
                }
            }
        }catch(java.lang.Exception ex){
            Logger.getLogger(UtilRender.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;
    }
    
    /**
     * Visualiza la ventana de notificaciones de los analisis de los modelos.
     */
    public static void abrirVentanaNotificacionesModeloAnalizado(){
        try{
            JFrame objFrame = Utileria.objFrame;
            if(objFrame != null){
                JDialogNotificacionModeloAnalizado objDialog = new JDialogNotificacionModeloAnalizado(objFrame);
                objDialog.setLocationRelativeTo(objFrame);
                CuatroApp.getApplication().show(objDialog);
            }            
        }catch(java.lang.IllegalStateException ex){
            UtilRender.printlnConsole("Error de Inicialización de Contexto.", UtilRender.ACTION_NORMAL, false);            
        }
    }
}